import dayjs from 'dayjs';

const formatTime = (date: dayjs.Dayjs, template: string | undefined) => dayjs(date).format(template);

const formatNumber = (n: number) => {
  const s = n.toString()
  return s[1] ? s : '0' + s
}

/**
 * 获取cdn裁剪后链接
 *
 * @param {string} url 基础链接
 * @param {number} width 宽度，单位px
 * @param {number} [height] 可选，高度，不填时与width同值
 */
const cosThumb = (url: string, width: number, height: number = width) => {
  if (url.indexOf('?') > -1) {
    return url;
  }

  if (url.indexOf('http://') === 0) {
    url = url.replace('http://', 'https://');
  }

  return `${url}?imageMogr2/thumbnail/${~~width}x${~~height}`;
};

/**
 * 手机号码*加密函数
 * @param {string} phone 电话号
 * @returns
 */
export const phoneEncryption = (phone: string) => {
  return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
};

// 内置手机号正则字符串
const innerPhoneReg = '^1(?:3\\d|4[4-9]|5[0-35-9]|6[67]|7[0-8]|8\\d|9\\d)\\d{8}$';

/**
 * 手机号正则校验
 * @param phone 手机号
 * @param phoneReg 正则字符串
 * @returns true - 校验通过 false - 校验失败
 */
const phoneRegCheck = (phone: string) => {
  const phoneRegExp = new RegExp(innerPhoneReg);
  return phoneRegExp.test(phone);
};

/**
 * 获取顶部导航高度
 */
export const getNavbarInfo = (): INavbarInfo => {
  // 获取菜单按钮（右上角胶囊按钮）的布局位置信息
  // 胶囊位置信息，低版本时，设置固定值
  let headerPosi = { width: 87, height: 64, right: 7, top: 24, bottom: 56 }
  if (wx.getMenuButtonBoundingClientRect) {
    headerPosi = wx.getMenuButtonBoundingClientRect();
  }

  const systeminfo = getApp().globalData.systemInfo || wx.getSystemInfoSync();
  const statusBarHeight = systeminfo.statusBarHeight // 状态栏高度
  const btnPosi = {
    height: headerPosi.height,
    width: headerPosi.width,
    top: headerPosi.top - statusBarHeight, // 胶囊top - 状态栏高度
    bottom: headerPosi.bottom - headerPosi.height - statusBarHeight, // 胶囊bottom - 胶囊height - 状态栏height （现胶囊bottom 为距离导航栏底部的长度）
    left: systeminfo.screenWidth - headerPosi.right // 屏幕宽度 - 胶囊right
  }

  return {
    statusBarHeight,
    navbarHeight: headerPosi.bottom + btnPosi.bottom,
    navbarBtn: btnPosi
  }
}

module.exports = {
  formatTime,
  formatNumber,
  cosThumb,
  phoneEncryption,
  phoneRegCheck,
  getNavbarInfo
}